package lingwu;


import org.junit.Test;

import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class StringDemo {

    /*String字符串复习*/

      @Test
    public void method1() {
         int a=10,b=3;


          DecimalFormat df=new DecimalFormat("0.0000");//设置保留位数

          String s = df.format((float) a / b);


          //字符串转 float
          Float  num  = Float.valueOf(s);
          System.out.println(num);

      }


      @Test
    public void method2() {
          int a=10,b=3;
          float v = (float) a / b;
          System.out.println(v);   //3.3333333      float有效数字6位


          double v1 = (double) a / b;
          System.out.println(v1);  //3.3333333333333335   double 有效数字15位

      }


      @Test
    public void method3() {
          //toUpperCase()
          //          使用默认语言环境的规则将此 String 中的所有字符都转换为大写

          String s="abCFH";
          String s1 = s.toUpperCase();
          System.out.println(s1);

          String s2 = s.toLowerCase();
          System.out.println(s2);



      }




      @Test   //字符串反转
    public void method4() {
           String s="123456";
          int length = s.length();
          String reverse = "";
          for (int i = 0; i < length; i++){
              reverse = s.charAt(i) + reverse;
          }

          System.out.println(reverse);


          /*StringBuilder与StringBuffer自身的append()方法内都使用了继承自AbstractStringBuilder的append()方法。
          既然使用同一个方法，那为什么说StringBuilder线程不安全呢？
          原因在于StringBuffer在append()方法上使用了synchronized，而StringBuilder没有使用。
           */



       //线程安全的可变字符序列 StringBuffer
          //StringBuffer(String str)
          //          构造一个字符串缓冲区，并将其内容初始化为指定的字符串内容。

          //toString()
          //          返回此序列中数据的字符串表示形式


          String s1 = new StringBuffer(s).reverse().toString();
          System.out.println(s1);
      }


      @Test
    public void method5() {
          // https://blog.csdn.net/weixin_35084134/article/details/115089459
      }


      @Test
    public void method6() {
          //hashcode其实就是对一个对象中的每个元素进行一次运算生成的结果值，两个不同的对象是有可能出现同一个hash值的
          //两个对象的equals相同  hashcode一定相同
          //两个对象hashcode相同   equals不一定相同
          String s1="hello";
          String s2="he"+new String("llo");
          System.out.println(s1.hashCode());
          System.out.println(s2.hashCode());
          System.out.println(s1.equals(s2));


          System.out.println(s1==s2);  //false
      }


      @Test
    public void method7() {
          //”==”测试两个字符串的引用是否相同，equals()测试两个字符串的值是否相同。

          String s1="12345";
          String s2="12345";
          String s3=new String("12345");
          System.out.println(s2==s1);
          System.out.println(s2==s3);
          System.out.println(s2.equals(s3));
      }


      @Test
    public void method8() {
          //字符串变成整数
          String s="123456";

          int b=Integer.parseInt(s);

          System.out.println(b);
      }



    @Test  //StringBuffer扩容问题

    public void method9() {

          /*构造方法：StringBuffer()
方法描述：构造一个没有字符的字符串缓冲区，初始容量为16。

构造方法：StringBuffer(String str)
方法描述：构造一个初始化为指定字符串内容的字符串缓冲区，初始容量为str.length() + 16。

int capacity()
          返回当前容量 */


        String s="123456";
        //初始容量为str.length() + 16。
        StringBuffer buffer = new StringBuffer(s);
        String s1 = buffer.reverse().toString();
        System.out.println(s1);

        System.out.println(buffer.length());
        buffer.append("7");
        buffer.append("111111111111111111");
        System.out.println(buffer.capacity());   //扩容 22 到  46 (2n+2)
    }


}
